/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import dao.ChiTietDonDatHangDAO;
import dao.DonDatHangDAO;
import dao.GiayDAO;
import dao.LoaiGiayDAO;
import dao.MauSacDAO;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import pojo.ChiTietDonDatHangPOJO;
import pojo.DonDatHangPOJO;
import pojo.GiayPOJO;
import pojo.KhachHangPOJO;
import pojo.LoaiGiayPOJO;
import pojo.MauSacPOJO;

/**
 *
 * @author Administrator
 */
@WebServlet(name = "GioHangController", urlPatterns = {"/GioHangController"})
public class GioHangController extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            //Lấy danh mục loại giày.
            ArrayList<LoaiGiayPOJO> dsLoaiGiay = LoaiGiayDAO.layDanhMucLoaiGiay();
            request.setAttribute("dsLoaiGiay", dsLoaiGiay);

            //Lấy danh mục màu sắc.
            ArrayList<MauSacPOJO> dsMauSac = MauSacDAO.layDanhMucMauSac();
            request.setAttribute("dsMauSac", dsMauSac);
            //----------------------------------------------------------

            HttpSession session = request.getSession();
            //======================================================================
            //XỬ LÝ CHUNG CHO CẢ 2 PHẦN GIỎ HÀNG MỚI MUA VÀ GIỎ HÀNG CẬP NHẬT SAU KHI MUA
            //======================================================================
            //Kiểm tra nếu người dùng chưa đăng nhập thì không cho mua hàng.
            if (session.getAttribute("KhachHang") == null) {
                String url = request.getContextPath() + "/DanhMucGiayController?Action=View";
                response.sendRedirect(url);
                return;
            }

            //======================================================================
            //XỬ LÝ CHO PHẦN GIỎ HÀNG MỚI MUA
            //======================================================================

            //Khai báo session giỏ hàng.
            ArrayList<GiayPOJO> gioHang = null;
            if (session.getAttribute("GioHang") == null) {
                gioHang = new ArrayList<GiayPOJO>();
                session.setAttribute("GioHang", gioHang);
            } else {
                gioHang = (ArrayList<GiayPOJO>) session.getAttribute("GioHang");
            }

            // <editor-fold desc="2.Thêm sách vào giỏ">
            String action = request.getParameter("action");
            if (action != null && action.equals("Them")) {
                String s = request.getParameter("MaGiay");
                int maGiay = 0;
                if (s != null) {
                    maGiay = Integer.parseInt(s);
                }
                boolean kq = false;
                for (int i = 0; i < gioHang.size(); i++) {
                    GiayPOJO giay = gioHang.get(i);
                    if (giay.getMaGiay() == maGiay) {
                        giay.setSoLuong(giay.getSoLuong() + 1);
                        kq = true;
                        break;
                    }
                }
                if (kq == false) {
                    GiayPOJO giay = new GiayPOJO();
                    giay = GiayDAO.layThongTinGiay(maGiay);
                    giay.setSoLuong(1);
                    gioHang.add(giay);
                }
            }
            // </editor-fold>

            // <editor-fold desc="2.Cập nhật giỏ hàng">
            if (request.getParameter("btCapNhat") != null) {
                for (int i = 0; i < gioHang.size(); i++) {
                    String s = request.getParameter("tfSoLuong" + i);
                    GiayPOJO giay = gioHang.get(i);
                    if (s != null) {
                        int soLuong = Integer.parseInt(s);
                        giay.setSoLuong(soLuong);
                    }
                }
            }
            // </editor-fold>

            // <editor-fold desc="3.Xóa giày khỏi giỏ hàng">
            if (request.getParameter("btXoa") != null) {
                //Nếu người dùng nhấn xóa
                //Form sẽ gởi lên server các mã giày xóa
                //Giá trị này nằm trong phần value của checkbox cbXoa.
                String[] s = request.getParameterValues("cbXoa");
                if (s != null) {
                    //Chuyển kiểu chuỗi thành kiểu số int.
                    int[] cacMaGiayXoa = new int[s.length];
                    for (int i = 0; i < s.length; i++) {
                        cacMaGiayXoa[i] = Integer.parseInt(s[i]);
                        //out.println(cacMaGiayXoa[i]);
                    }
                    for (int i = 0; i < cacMaGiayXoa.length; i++) {
                        //Lấy một mã giày cần xóa ra.
                        int maGiay = cacMaGiayXoa[i];
                        //Tìm xem mã giày đã có trong danh mục các mã giày đã mua không.
                        for (int j = 0; j < gioHang.size(); j++) {
                            GiayPOJO giay = gioHang.get(j);
                            if (giay.getMaGiay() == maGiay) { //Nếu có
                                gioHang.remove(j); //Xóa sách j khỏi giỏ hàng.
                            }
                        }
                    }
                } else {
                    out.println("Lỗi, hãy check vào ít nhất 1 checkbox");
                }
            }
            // </editor-fold>

            // <editor-fold desc="4.Xóa tất cả giày khỏi giỏ hàng">
            if (request.getParameter("btXoaTatCa") != null) {
                for (int j = 0; j < gioHang.size(); j++) {
                    gioHang.remove(j); //Xóa giày j khỏi giỏ hàng.
                }
            }
            // </editor-fold>

            // <editor-fold desc="5.Tiếp tục mua hàng">
            if (request.getParameter("btTiepTucMuaHang") != null) {
                //Nếu người dùng nhấn tiếp tục mua hàng
                //Chuyển đến trang danh sách sản phẩm
                String url = request.getContextPath() + "/DanhMucGiayController?Action=View";
                response.sendRedirect(url);
                return;
            }
            // </editor-fold>

            // <editor-fold desc="6.Lưu giỏ hàng">
            boolean kq = false;
            //Nếu chọn lưu giỏ hàng và số giày trong giỏ khác 0 thì mới lập đơn đặt hàng.
            if (request.getParameter("btLuuGioHang") != null && gioHang.size() != 0) {
                KhachHangPOJO khachHang = (KhachHangPOJO) session.getAttribute("KhachHang");

                //Lưu đơn đặt hàng.
                DonDatHangPOJO ddh = new DonDatHangPOJO();
                Date d = new Date();
                ddh.setTenDangNhap(khachHang.getTenDangNhap());
                ddh.setNgayDatHang(new Timestamp(d.getTime()));
                ddh.setMaTinhTrang(1); //Tình trạng mới đặt hàng.
                //Thêm 1 đơn đặt hàng
                int maDonDatHang = DonDatHangDAO.themDonDatHang(ddh);

                //Lưu các chi tiết đơn đặt hàng.
                for (int i = 0; i < gioHang.size(); i++) {
                    GiayPOJO giay = gioHang.get(i);
                    int soThuTu = i + 1;
                    ChiTietDonDatHangPOJO ct = new ChiTietDonDatHangPOJO();
                    ct.setMaDonDatHang(maDonDatHang);
                    ct.setSoThuThu(soThuTu);
                    ct.setMaGiay(giay.getMaGiay());
                    ct.setSoLuong(giay.getSoLuong());
                    ct.setDonGia(giay.getGiaBan());
                    kq = ChiTietDonDatHangDAO.themChiTietDonDatHang(ct);
                    //out.println("Chi tiết thêm đơn đặt hàng: "+kq);
                }
                //Xóa giỏ hàng khỏi session.
                session.removeAttribute("GioHang");

                //Chuyển sang trang cho khách hàng xem đơn đặt hàng vừa đặt.       
                String url = request.getContextPath() + "/LichSuMuaHangController";
                response.sendRedirect(url);

                //NGƯNG XỬ LÝ.
                return;
            }
            // </editor-fold>

            //CHUYỂN ĐẾN TRANG XEM GIỎ HÀNG.           
            request.getRequestDispatcher("/client/gio-hang.jsp").forward(request, response); 
            // </editor-fold>

        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
